package com.baichang.taoshunda.service;

import com.baichang.framework.excelption.ServiceException;
import com.baichang.framework.model.Page;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2017/11/1 0001.
 */
public interface GoodsService {
    /**
     * 活动下查询商品
     *
     * @param goodsBusId
     * @param type
     * @param goodsName
     * @param nowPage
     * @param pageSize   @return
     */
    Page queryOutGoods(String goodsBusId, Integer type, String goodsName, int nowPage, int pageSize);

    /**
     * 广告位下的商品
     *
     * @param id
     * @param nowPage
     * @param pageSize
     * @return
     */
    Page queryOutCarouselGoods(Integer id, Integer type, int nowPage, int pageSize);

    /**
     * 查询商品
     *
     * @param nowPage
     * @param pageSize
     * @param goodsName
     * @param busName
     * @param type      @return
     * @param business
     */
    Page queryGoods(int nowPage, int pageSize, String goodsName, String busName, Integer type, Integer business);

    /**
     * 商品下架
     *
     * @param id
     * @param isUpper
     * @return
     */
    int updateIsUpper(Integer id, Integer isUpper);

    /**
     * 查询商品交易记录
     *
     * @param id
     * @param nowPage
     * @param pageSize
     * @return
     */
    Page queryGoodsOrder(Integer id, int nowPage, int pageSize);

    /**
     * 下架和新添加的商品
     *
     * @param nowPage
     * @param pageSize
     * @param goodsName
     * @param busName
     * @param businessId
     * @param type       @return
     */
    Page queryNewOrOldGoods(int nowPage, int pageSize, String goodsName, String busName, Integer businessId, Integer type);

    /**
     * 查询商品类型
     *
     * @param type
     * @return
     */
    List<Map<String, Object>> queryGoodsType(Integer type);

    /**
     * 查询商家商品数量
     *
     * @param companyId
     * @return
     */
    Integer getCompanyGoodsNumber(Integer companyId);

    /**
     * 查询举报的商品
     *
     * @param nowPage
     * @param pageSize
     * @param name
     * @param busName  @return
     */
    Page queryReportGoods(int nowPage, int pageSize, String name, String busName);

    /**
     * 根据商品类别编号与用户购物车查询商品列表
     *
     * @param typeId
     * @param userId
     * @return
     */
    List<Map<String, Object>> findGoodsListByTypeIdAndShopCar(Integer typeId, Integer userId);

    /**
     * 根据商品类别编号与用户编号查看商品列表以及购物车内的数量
     *
     * @param typeId
     * @param userId
     * @return
     */
    List<Map<String, Object>> findGoodsListTakeoutByTypeIdAndShopCar(Integer typeId, Integer userId);

    /**
     * 查看商家商品分类下是否存在商品
     *
     * @param id
     * @return
     */
    int getGoodsCountByGoodsTypeId(Integer id);

    /**
     * 查看商家商品分类下的商品
     *
     * @param bussId
     * @param goodsTypeId
     * @return
     */
    List<Map<String, Object>> findGoodsList(Integer bussId, Integer goodsTypeId);

    /**
     * 添加商品
     *
     * @param cityId
     * @param bussId
     * @param name
     * @param oldPrice
     * @param price
     * @param bagging
     * @param headPic
     * @param images
     * @param typeId
     * @param unit
     * @param spec
     * @param isFree
     * @param isInvoice
     * @param bannerImages
     * @param goodsDetails         @return
     * @param isBespeak
     * @param isNoReasonReturn
     * @param isHomeInstallation
     * @param commercialActivities
     * @param goodsVideo
     * @param goodsVideoImg
     */
    Map<String, Object> addGoods(Integer cityId, Integer bussId, String name, Double oldPrice, Double price, Double bagging, String headPic, String images, Integer typeId, String unit, String spec, Integer isFree, Integer isInvoice, String bannerImages, String goodsDetails, Integer isBespeak, Integer isNoReasonReturn, Integer isHomeInstallation, String commercialActivities, String goodsVideo, String goodsVideoImg) throws ServiceException;

    /**
     * 修改商品
     *
     * @param id
     * @param name
     * @param price
     * @param bagging
     * @param headPic
     * @param images
     * @param unit
     * @param spec
     * @param companyId
     * @param isBespeak
     * @param isHomeInstallation
     * @param isNoReasonReturn
     * @param goodsDetails
     * @param commercialActivities
     * @param isFree
     * @param isInvoice
     * @param bannerImages         @return
     * @param goodsVideo
     * @param goodsVideoImg
     */
    Map<String, Object> updateGoods(Integer id, String name, Double price, Double bagging, String headPic, String images, String unit, String spec, Integer companyId, Integer isBespeak, Integer isHomeInstallation, Integer isNoReasonReturn, String goodsDetails, String commercialActivities, Integer isFree, Integer isInvoice, String bannerImages, String goodsVideo, String goodsVideoImg);

    /**
     * 删除商品
     *
     * @param id
     * @return
     */
    boolean deleteGoods(String id);

    /**
     * 修改上下架状态
     *
     * @param id
     * @param isUpper
     * @return
     */
    boolean updateGoodsIsUpper(Integer id, int isUpper);

    /**
     * 修改商品排序
     *
     * @param jsonData
     * @return
     */
    boolean updateGoodsOrderNum(String jsonData);

    /**
     * 查看商品详情
     *
     * @param goodsId
     * @param ulng
     * @param ulat    @return
     * @param userId
     */
    Map<String, Object> getGoodsDetails(Integer goodsId, double ulng, double ulat, int userId) throws ServiceException;

    /**
     * 查询商品详细
     *
     * @param goodsId
     * @param nowPage
     * @param pageSize
     * @return
     */
    Page queryGoodsDetails(Integer goodsId, int nowPage, int pageSize);

    /**
     * 广告位商品
     *
     * @param goodsId
     * @param nowPage
     * @param pageSize
     * @return
     */
    Page queryCarouselGoods(String goodsId, int nowPage, int pageSize);

    /**
     * 查询特价商品
     *
     * @param cityId
     * @param nowPage
     * @param pageSize
     * @param uLng
     * @param uLat     @return
     */
    Map getSpecialGoods(int cityId, int nowPage, int pageSize, String uLng, String uLat);

    /**
     * 关键字查询
     *
     * @param nowPage
     * @param pageSize
     * @param cityId
     * @param key
     * @return
     */
    List<Map<String, Object>> getGoodsByKey(int nowPage, int pageSize, int cityId, String key);

    /**
     * 获取分类下的商品列表
     *
     * @param nowPage
     * @param pageSize
     * @param companyId
     * @param userId
     * @return
     */
    List<Map<String, Object>> getGoodsByBussAndTypeID(int nowPage, int pageSize, int companyId, int userId) throws ServiceException;

    /**
     * 查询说有商品
     *
     * @param bussId   商家编号
     * @param nowPage
     * @param pageSize @return
     */
    List<Map<String, Object>> findAllGoodsList(Integer bussId, Integer nowPage, int pageSize);

    /***
     *
     * @param goodsId
     * @param busId
     * @param money
     *@param payType @return
     */
    Map<String, Object> goodsPay(Integer goodsId, Integer busId, BigDecimal money, Integer payType);

    /**
     * 添加缴费记录修改商品为特价商品
     *  @param goodsId
     * @param busId
     * @param payType
     * @param money
     * @param day
     * @param goodsDiscoutPrice
     * @param discountNumber    @return
     */
    boolean addGoodsPayHistory(Integer goodsId, Integer busId, Integer payType, BigDecimal money, Integer day, BigDecimal goodsDiscoutPrice, Integer discountNumber);

    /**
     * @param nowPage
     * @param pageSize
     * @param goodsName
     * @param isSpecial
     * @param bussName
     * @param type
     * @return
     */
    Page findGoods(int nowPage, int pageSize, String goodsName, int isSpecial, String bussName, Integer type);

    /**
     * @param id
     * @param isSpecial
     * @return
     */
    int noUpper(int id, Integer isSpecial);

    /**
     * @param nowPage
     * @param pageSize
     * @param goodsName
     * @param busName
     * @return
     */
    Page noUpperList(int nowPage, int pageSize, String goodsName, String busName);

    /**
     * @param id
     * @return
     */
    int yesUpper(int id);

    /**
     * @param id
     * @return
     */
    int deleteGoodsById(int id);

    /**
     * 查询每日特价的商品
     *
     * @param nowPage
     * @param pageSize
     * @param goodsName
     * @return
     */
    Page queryDayOffer(int nowPage, int pageSize, String goodsName);

    /**
     * @param id
     * @return
     */
    Map<String, Object> getShareGoodsById(Integer id);

    /**
     * @param id
     * @param goodsName
     * @param nowPage
     * @param pageSize  @return
     */
    Page businessGoods(Integer id, String goodsName, int nowPage, int pageSize);

    /**
     * 查询该商品的交易记录
     *
     * @param nowPage
     * @param pageSize
     * @param id
     * @param cstart
     * @param jyjlzffs
     * @return
     */
    Page getOrderListByGoodsId(int nowPage, int pageSize, int id, String cstart, Integer jyjlzffs);

    /**
     * 查询装备商城
     *
     * @param companyTypeId 商家类型编号  固定的57  客户定的不删除该分类
     * @param nowPage
     * @param pageSize      @return
     * @param userId
     */
    List<Map<String, Object>> findEquipmentList(int companyTypeId, int nowPage, int pageSize, int userId);

    /**
     * 查询装备商城商家信息
     *
     * @param companyTypeId 商家类型编号
     * @param ulat
     * @param ulng
     * @param userId        @return
     */
    Map<String, Object> findEquipmentInfo(int companyTypeId, double ulat, double ulng, int userId) throws ServiceException;

    /**
     * 功能描述:
     *
     * @param goodsId 商品编号
     * @return:
     * @auther: wsl
     * @date: 2019/1/24 16:35
     */
    Map<String, Object> discountDetail(Integer goodsId) throws ServiceException;
}
